#include <bits/stdc++.h>
#define int long long 
using namespace std;

const int maxn = 105;
int arr[maxn];
int dp1[maxn]; // dp1[i] 表示 1 ~ i 之间的最长上升子序列
int dp2[maxn];
int st1[maxn]; // 模拟单调栈
int st2[maxn]; // 模拟单调栈
int top1; // 栈中元素个数, 同时表示栈顶位置
int top2;
int n;

void solve(){
	cin >> n;
	for (int i=1;i<=n;i++) {
		cin >> arr[i];
	}
	
	for (int i=1;i<=n;i++) {
		if (arr[i] >= st1[top1]) {
			// 直接放
			st1[++top1] = arr[i];
		} else {
			// 找出第一个 >=  arr[i] 的元素, 将他替换
			int pos = lower_bound(st1+1, st1+1+top1, arr[i]) - st1;
			st1[pos] = arr[i];
		}
		dp1[i] = top1; // 栈的大小, 就是 i 之前的最长上升子序列长度
		
	}
	
	for (int i=n;i>=1;i--) {
		if (arr[i] >= st2[top2]) {
			// 直接放
			st2[++top2] = arr[i];
		} else {
			// 找出第一个 >=  arr[i] 的元素, 将他替换
			int pos = lower_bound(st2+1, st2+1+top2, arr[i]) - st2;
			st2[pos] = arr[i];
		}
		dp2[i] = top2; // 栈的大小, 就是 i 之前的最长上升子序列长度
	}
	int mn = 105;
	for (int i=1;i<=n;i++) {
		mn = min(mn, n-(dp1[i]+dp2[i+1]));
	}
	cout << mn << '\n';
	
}


signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	solve();
	return 0;
}
